package com.fuzzyclassification.utils;


//import Inferencia.Constantes;
//import Inferencia.RegraTeste;
import java.io.File;
import java.io.FileInputStream;
//import java.io.FileOutputStream;
//import java.text.DateFormat;
//import java.text.SimpleDateFormat;
import java.util.ArrayList;
//import java.util.Date;
import java.util.List; 
//import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 
import org.apache.poi.ss.usermodel.Row;

//import com.fuzzyclassification.ConjuntoFuzzy;
import com.fuzzyclassification.Consistencia;

import com.fuzzyclassification.Regra;

public class LeituraXLS {
    
    private String path;

    public LeituraXLS(String path) {
        this.path = path;
    }
    
    public List<Regra> lerPlanilha(int sheet, int operacao)
    {
        
        List<Regra> regras = new ArrayList();
        try {
            // Leitura
            FileInputStream fi = new FileInputStream(new File(this.path));
 
            // Carregando workbook
            HSSFWorkbook wb = new HSSFWorkbook(fi);
 
            // Selecionando a primeira aba
            HSSFSheet s = wb.getSheetAt(sheet);
 
            // Fazendo um loop em todas as linhas
            for (Row rowFor : s) {
                // FAzendo loop em todas as colunas
                try{
                	double STG = (double)rowFor.getCell(0).getNumericCellValue();
                	double SCG = (double)rowFor.getCell(1).getNumericCellValue();
                	double STR = (double)rowFor.getCell(2).getNumericCellValue();
                	double LPR = (double)rowFor.getCell(3).getNumericCellValue();
                	double PEG = (double)rowFor.getCell(4).getNumericCellValue();
                    int classe = (int)rowFor.getCell(5).getNumericCellValue();
                    
                    regras.add(new Regra(STG, SCG, STR, LPR, PEG, classe));
                    //System.out.println("==> "+STG+" - "+SCG+" - "+STR+" - "+LPR+" - "+PEG);
                
                } catch (Exception e) {
                        // Mostrar Erro
                        System.out.println(e.getMessage());
                }
            }
 
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        if(operacao == 1)
        {
            Consistencia consistencia = new Consistencia(regras);
            consistencia.eliminaInconsistenciaRegras();
            consistencia.eliminaRegrasRepetidas();
        }
        return regras;
    }    
    
    /*public void escreverXLS(List<RegraFuzzy> fuzzy, List<ConjuntoFuzzy> idade, 
            List<ConjuntoFuzzy> ano, List<ConjuntoFuzzy> nodulos, String name,
            List<RegraTeste> regrasTeste) 
    {
        Constantes.ERROS=0;
        for(RegraTeste teste: regrasTeste)
        {
            if(teste.getRegra().getClasse() != teste.classeResultado())
            {
                Constantes.ERROS++;
            }
        }

        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet firstSheet = workbook.createSheet();

        FileOutputStream fos = null;
        
//        DateFormat dateFormat = new SimpleDateFormat("ddMM_HHmmss");
//        Date date = new Date();


        try {
            fos = new FileOutputStream(new File("Resultado_novo\\"+name+"_"+Integer.toString(Constantes.ORDEM)+"_"
                    +Integer.toString(Constantes.ERROS)+".xls"));
            HSSFRow row = firstSheet.createRow(0);
            
            int linha = 1;
            
            //Classes de conjuntos            
            row = firstSheet.createRow(linha);
            row.createCell(0).setCellValue("Conjuntos Fuzzy: ");
            linha++;
            row = firstSheet.createRow(linha);
            row.createCell(0).setCellValue("Idade: ");
            linha++;
            row = firstSheet.createRow(linha);
            row.createCell(0).setCellValue("Nome: ");
            row.createCell(1).setCellValue("Limite Inferior: ");            
            row.createCell(2).setCellValue("Topo Inferior: ");
            row.createCell(3).setCellValue("Topo Superior: ");
            row.createCell(4).setCellValue("Limite Superior: ");
            linha++;
            
            for(ConjuntoFuzzy conj: idade)
            {
                row = firstSheet.createRow(linha);
                row.createCell(0).setCellValue(conj.getNome());
                row.createCell(1).setCellValue(conj.getLimiteInferior());
                row.createCell(2).setCellValue(conj.getTopoInferior());
                row.createCell(3).setCellValue(conj.getTopoSuperior());
                row.createCell(4).setCellValue(conj.getLimSuperior());
                linha++;                
            }
            row = firstSheet.createRow(linha);
            linha++;
            row = firstSheet.createRow(linha);
            row.createCell(0).setCellValue("Ano: ");
            linha++;
            
            for(ConjuntoFuzzy conj: ano)
            {
                row = firstSheet.createRow(linha);
                row.createCell(0).setCellValue(conj.getNome());
                row.createCell(1).setCellValue(conj.getLimiteInferior());                
                row.createCell(2).setCellValue(conj.getTopoInferior());
                row.createCell(3).setCellValue(conj.getTopoSuperior());
                row.createCell(4).setCellValue(conj.getLimSuperior());
                linha++;                
            }
            
            row = firstSheet.createRow(linha);
            linha++;
            row = firstSheet.createRow(linha);
            row.createCell(0).setCellValue("Nodulos: ");
            linha++;
            
            for(ConjuntoFuzzy conj: nodulos)
            {
                row = firstSheet.createRow(linha);
                row.createCell(0).setCellValue(conj.getNome());
                row.createCell(1).setCellValue(conj.getLimiteInferior());
                row.createCell(2).setCellValue(conj.getTopoInferior());
                row.createCell(3).setCellValue(conj.getTopoSuperior());
                row.createCell(4).setCellValue(conj.getLimSuperior());
                linha++;                
            }
            
            row = firstSheet.createRow(linha);
            linha++;
            row = firstSheet.createRow(linha);            
            row.createCell(0).setCellValue("Regras fuzzy finais: ");
            linha++;
            
            row = firstSheet.createRow(linha);
            row.createCell(0).setCellValue("Idade");
            row.createCell(1).setCellValue("Ano");
            row.createCell(2).setCellValue("Nodulos");
            row.createCell(3).setCellValue("Classe");
            linha++;
            
            for (int i=0; i<fuzzy.size(); i++) {
                row = firstSheet.createRow(linha);

                row.createCell(0).setCellValue(fuzzy.get(i).getIdade().getNome());
                row.createCell(1).setCellValue(fuzzy.get(i).getAno().getNome());
                row.createCell(2).setCellValue(fuzzy.get(i).getNodulo().getNome());
                row.createCell(3).setCellValue(fuzzy.get(i).getRegra().getClasse());
                linha++;
            } // fim do for

            
            linha++;
            row = firstSheet.createRow(linha);            
            linha++;
            row = firstSheet.createRow(linha);  
            linha++;
            row = firstSheet.createRow(linha);  
            
            row.createCell(0).setCellValue("Resultado dos Testes: ");
            linha++;
            row = firstSheet.createRow(linha);
            row.createCell(0).setCellValue("IDADE");
            row.createCell(1).setCellValue("ANO");
            row.createCell(2).setCellValue("NODULOS");
            row.createCell(3).setCellValue("CLASSIFICAÇÃO ESPERADA");
            row.createCell(4).setCellValue("CLASSIFICAÇÃO FUZZY");
            linha++;  
            
            for(RegraTeste teste: regrasTeste)
            {
                row = firstSheet.createRow(linha);
                row.createCell(0).setCellValue(teste.getRegra().getIdade());
                row.createCell(1).setCellValue(teste.getRegra().getAno());
                row.createCell(2).setCellValue(teste.getRegra().getNodulos());
                row.createCell(3).setCellValue(teste.getRegra().getClasse());
                row.createCell(4).setCellValue(teste.classeResultado());
                linha++;  
            }
            linha++;
            row = firstSheet.createRow(linha);  
            linha++;
            row = firstSheet.createRow(linha);  
            
            row.createCell(0).setCellValue("Testes errados: ");
            linha++;
            
            row = firstSheet.createRow(linha);
            row.createCell(0).setCellValue("IDADE");  
            row.createCell(1).setCellValue("ANO");
            row.createCell(2).setCellValue("NODULOS");
            row.createCell(3).setCellValue("CLASSIFICAÇÃO ESPERADA");
            row.createCell(4).setCellValue("CLASSIFICAÇÃO FUZZY");
            linha++; 
            
           
            for(RegraTeste teste: regrasTeste)
            {
                if(teste.getRegra().getClasse() != teste.classeResultado())
                {
                    row = firstSheet.createRow(linha);
                    row.createCell(0).setCellValue(teste.getRegra().getIdade());
                    row.createCell(1).setCellValue(teste.getRegra().getAno());
                    row.createCell(2).setCellValue(teste.getRegra().getNodulos());
                    row.createCell(3).setCellValue(teste.getRegra().getClasse());
                    row.createCell(4).setCellValue(teste.classeResultado());
                    linha++;
                }
            }
            
            
            workbook.write(fos);

        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Erro ao exportar arquivo");
        } finally {
            try {
                fos.flush();
                fos.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    } // fim do metodo exp*/
    
}
